home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / other / how-to.pl / RPM-HOWTO.pl.txt < prev    next >
Encoding:
Text File  |  1998-02-13  |  40.1 KB  |  1,255 lines

  1.   Menad┐er Pakiet≤w RedHat-a (RPM) - Jak To Zrobiµ
  2.   Autor: Donnie Barnes djb@redhat.com
  3.   V2.0, 8 Kwietnia 1997
  4.   Wersja polska: Jacek Pliszka pliszka@fuw.edu.pl
  5.  
  6.  
  7.   Niniejszy dokument jest t│umaczeniem RPM-HOWTO i w skr≤cie opisuje jak
  8.   co╢ zrobiµ u┐ywaj▒c rpm-a czyli Menad┐era Pakiet≤w RedHat-a (RedHat
  9.   Package Manager).  Dokument ten zosta│ napisany w standardzie
  10.   ISO-8859-2.  Orygina│ t│umaczenia tego dokumentu znajduje siΩ pod
  11.   adresem http://www.jtz.org.pl <http://www.jtz.org.pl>.
  12.   http://www.jtz.org.pl a tak┐e na ftp://ftp.icm.edu.pl/pub/Linux/sun¡
  13.   site/docs/HOWTO/ <ftp://ftp.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/>.
  14.   ______________________________________________________________________
  15.  
  16.   Table of Contents
  17.  
  18.  
  19.   1. Wprowadzenie
  20.  
  21.   2. Do czego s│u┐y RPM?
  22.  
  23.   3. Informacje og≤lne
  24.  
  25.      3.1 Sk▒d wzi▒µ RPM?
  26.      3.2 Wymagania RPM
  27.  
  28.   4. U┐ywanie RPM
  29.  
  30.   5. A co tak
  31.  
  32.   6. Tworzenie rpm-≤w.
  33.  
  34.      6.1 Plik rpmrc
  35.      6.2 Plik specyfikuj▒cy .spec
  36.      6.3 Nag│≤wek
  37.      6.4 Sekcja Prep
  38.      6.5 Sekcja Build
  39.      6.6 Sekcja Install
  40.      6.7 Opcjonalne sekcje pre i post dla sekcji Install/Uninstall
  41.      6.8 Sekcja Files
  42.      6.9 Tworzenie pakietu
  43.         6.9.1 Katalogi z plikami ╝r≤d│owymi
  44.         6.9.2 Pr≤bne tworzenie pakietu
  45.         6.9.3 Tworzenie listy plik≤w
  46.         6.9.4 Tworzenie pakietu RPM
  47.      6.10 Testowanie pakietu
  48.      6.11 Co robiµ z Twoimi nowymi RPM-ami ?
  49.      6.12 Co teraz?
  50.  
  51.   7. Tworzenie RPM-≤w na wiele platform.
  52.  
  53.      7.1 Przyk│adowy plik specyfikuj▒cy .spec
  54.      7.2 Dyrektywa optflags
  55.      7.3 Makra
  56.      7.4 Wy│▒czanie pewnych platform w pakietach
  57.      7.5 Ostatnie poprawki
  58.  
  59.   8. Uwaga o prawach autorskich
  60.  
  61.  
  62.  
  63.   ______________________________________________________________________
  64.  
  65.  
  66.  
  67.   1.  Wprowadzenie
  68.  
  69.   Skr≤t RPM pochodzi od ang.  Red Hat Package Manager co oznacza w
  70.   wolnym t│umaczeniu menad┐er pakiet≤w RedHat-a.  Jednak pomimo tego, ┐e
  71.   w nazwie znajduje siΩ Red Hat, to w zamierzeniu jest on systemem
  72.   otwartym, dostΩpnym dla ka┐dego. Umo┐liwia on spakowanie zar≤wno kodu
  73.   ╝r≤d│owego jak i program≤w binarnych do zwartej postaci zawieraj▒cej
  74.   dodatkowo informacje istotne przy zarz▒dzaniu oprogramowaniem.
  75.   Umo┐liwia to │atw▒ instalacjΩ, od╢wie┐anie oraz usuwanie
  76.   oprogramowania. Informacja o zainstalowanym oprogramowaniu jest │atwo
  77.   dostΩpna jako ┐e RPM tworzy bazΩ danych o wszystkich pakietach
  78.   zainstalowanych w naszym systemie.  Pozwala to na szybkie sprawdzenie
  79.   czy dany pakiet jest zainstalowany, a je╢li tak to co zawiera, jaka
  80.   jest jego wersja, jakie pliki zosta│y przez niego w systemie
  81.   zainstalowane oraz jakich innych pakiet≤w wymaga.  Pozwala te┐
  82.   sprawdziµ do jakiego pakietu nale┐y dany plik.
  83.  
  84.   Przyp. t│um. rpm jest obecnie u┐ywany zar≤wno do plik≤w w postaci
  85.   ╝r≤d│owej jak i binarnej. W oryginale autor odwo│ujΩ siΩ g│≤wnie do
  86.   tej pierwszej. Jednak poniewa┐ obecnie czΩ╢ciej u┐ywa siΩ pakiet≤w w
  87.   postaci binarnej to pliki z kt≤rych powsta│ rpm a kt≤re maj▒ byµ
  88.   zainstalowane r≤wnie┐ bΩdΩ nazywa│ plikami ╝r≤d│owymi za╢ proces
  89.   instalacji b▒d╝ kompilacji - instalacj▒.
  90.  
  91.  
  92.   Firma Red Hat Software zachΩca inne firmy i grupy tworz▒ce
  93.   oprogramowanie do bli┐szego zapoznania siΩ z RPM i wykorzystania go
  94.   przy tworzeniu w│asnych pakiet≤w.  BΩd▒c do╢µ elastycznym i │atwym w
  95.   u┐yciu, RPM pozwala budowaµ nawet bardzo obszerne zbiory pakiet≤w.
  96.   Pomimo tego, ┐e jest to system ca│kowicie otwarty i dostΩpny, jego
  97.   autorzy chΩtnie wys│uchaj▒ informacji o b│Ωdach i ewentualnych
  98.   poprawkach.  (Jednak przed zg│oszeniem ``b│Ωdu'' nale┐y, tak jak
  99.   zawsze, najpierw sprawdziµ czy ma siΩ najnowsz▒ stabiln▒ wersjΩ,
  100.   przejrzeµ dokumentacjΩ oraz przeszukaµ archiwa USENET i je╢li i tam
  101.   nie bΩdzie odpowiedzi - spytaµ na odpowiedniej grupie dyskusyjnej np.
  102.   pl.comp.os.linux -przyp. t│um.)  U┐ywanie i rozpowszechnianie RPM jest
  103.   wolne od op│at i regulowane Publiczn▒ Licencj▒ GNU - GPL (ang. GNU
  104.   Public Licence).
  105.  
  106.  
  107.   Bardziej szczeg≤│owa dokumentacja dotycz▒ca RPM jest zawarta w ksi▒┐ce
  108.   Eda Bailey'a, Maximum RPM, kt≤ra mo┐na ╢ci▒gn▒µ b▒d╝ zakupiµ w
  109.   www.redhat.com <http://www.redhat.com>.
  110.  
  111.  
  112.   2.  Do czego s│u┐y RPM?
  113.  
  114.   Na pocz▒tku warto powiedzieµ co nieco o ``filozofii'' RPM.  Celem jego
  115.   projektant≤w by│o umo┐liwienie u┐ycia pierwotnych kod≤w ╝r≤d│owych.
  116.   Zanim powsta│ RPM, jego autorzy u┐ywali RPP (przy czym podkre╢laj▒, ┐e
  117.   RPM nie nie jest na nim oparty ), w kt≤rym udostΩpniano poprawione
  118.   kody ╝r≤d│owe, konkretnie te, kt≤re by│y u┐ywane do instalacji.
  119.   Teoretycznie mog│oby to wystarczyµ, bo mo┐na by│o zainstalowaµ pakiet
  120.   ╝r≤d│owy RPP i skompilowaµ go (poleceniem make) bez wiΩkszych
  121.   problem≤w.  Jednak┐e nie by│y to oryginalne ╝r≤d│a i trudno by│o na
  122.   pierwszy rzut oka powiedzieµ co w nich zosta│o zmienione.  NiezbΩdnym
  123.   by│o ╢ci▒gniΩcie r≤wnie┐ oryginalnych ╝r≤de│.  RPM za╢ zawiera
  124.   oryginalne ╝r≤d│a wraz z poprawkami kt≤rych dokonano. W opinii autor≤w
  125.   rozwi▒zanie to jest znacznie lepsze. Dlaczego?
  126.  
  127.   Z paru powod≤w. Po pierwsze, je╢li pojawi siΩ nowa wersja programu to
  128.   nie zaczynamy od zera. Niekt≤re poprawki, kt≤re by│y dobre dla
  129.   poprzedniej wersji, mog▒ byµ w│a╢ciwe, najwy┐ej po minimalnych
  130.   zmianach i dla obecnej. By siΩ o tym przekonaµ, wystarczy do nich
  131.   zajrzeµ.  Poza tym wszystkie domy╢lne opcje potrzebne do instalacji s▒
  132.   w ten spos≤b │atwo dostΩpne.
  133.   Poza tym RPM zaprojektowano tak, aby umo┐liwiµ sprawdzanie wielu
  134.   istotnych informacji dotycz▒cych zar≤wno pojedy±czego, konkretnego
  135.   pakietu jak i ich zestawu b▒d╝ te┐ wszystkich pakiet≤w zainstalowanych
  136.   w danym systemie.  Przyk│adem takiej informacji jest lista pakiet≤w,
  137.   kt≤rych dany pakiet wymaga wraz z numerami wersji.  Mo┐liwe jest
  138.   r≤wnie┐ sprawdzenie z jakiego pakietu pochodzi konkretny plik oraz
  139.   gdzie mo┐na znale╝µ jego wersjΩ ╝r≤d│ow▒.  Pliki RPM s▒ ju┐
  140.   wewnΩtrznie spakowane, ale sprawdzanie informacji dotycz▒cych
  141.   konkretnego pakietu jest proste i szybkie dziΩki specjalnemu binarnemu
  142.   nag│≤wkowi kt≤ry zawiera praktycznie wszystkie niezbΩdne informacje o
  143.   pakiecie.
  144.  
  145.  
  146.   Innym atutem RPM jest umiejΩtno╢µ weryfikacji  pakiet≤w.  Je╢li boisz
  147.   siΩ, ┐e skasowa│e╢ jaki╢ wa┐ny plik, to mo┐esz to po prostu sprawdziµ.
  148.   RPM poinformuje CiΩ o wykrytych nieprawid│owo╢ciach. Je╢li zajdzie
  149.   potrzeba, to mo┐esz │atwo odnowiµ zainstalowany pakiet przy czym Twoje
  150.   pliki konfiguracyjne zostan▒ zachowane.  Oczywi╢cie mo┐esz te┐
  151.   zainstalowaµ je od nowa.
  152.  
  153.  
  154.  
  155.   Autorzy chc▒ podziΩkowaµ grupie ludzi od dystrybucji BOGUS za wiele
  156.   ich idei i pomys│≤w kt≤re wykorzystano w RPM.  Gdy┐ o ile RPM zosta│
  157.   napisany w ca│o╢ci przez Red Hat Software, to zasady jego dzia│ania s▒
  158.   oparte na kodzie stworzonym przez BOGUS (PM oraz PMS).
  159.  
  160.  
  161.   3.  Informacje og≤lne
  162.  
  163.  
  164.   3.1.  Sk▒d wzi▒µ RPM?
  165.  
  166.   Najprostszym sposobem jest instalacja Linux-a Red Hat.  Je╢li kto╢ nie
  167.   chce tego robiµ to mo┐e u┐ywaµ RPM bez tego. W Polsce RPM jest
  168.   dostΩpny np. pod adresem: ftp.icm.edu.pl
  169.   <ftp://ftp.icm.edu.pl/pub/redhat/code/rpm> - polskim mirrorze
  170.   ftp.redhat.com.
  171.  
  172.  
  173.   3.2.  Wymagania RPM
  174.  
  175.   Podstawowym wymaganiem RPM-a jest cpio o numerze wersji 2.4.2 lub
  176.   wy┐szym. Mimo ┐e RPM jest pomy╢lany do pracy pod Linux-em to r≤wnie
  177.   mo┐e byµ przeniesiony na inne systemy Unix. W rzeczywisto╢ci uda│o siΩ
  178.   go ju┐ uruchomiµ pod SunOS, Solaris, AIX, Irix, AmigaOS i wieloma
  179.   innymi systemami.  Jednak nale┐y pamiΩtaµ, ┐e pakiety binarne
  180.   stworzone na r≤┐nych Unix-ach mog▒ nie byµ ze sob▒ zgodne.
  181.  
  182.  
  183.   S▒ to minimalne wymagania by zainstalowaµ RPM-y.  By tworzyµ RPM-y z
  184.   kodu ╝r≤d│owego potrzebne jest r≤wnie┐ wszystko to co normalnie jest
  185.   wymagane przy tworzeniu pakietu np.  gcc, make, itd.
  186.  
  187.  
  188.   4.  U┐ywanie RPM
  189.  
  190.   Najprostszym wykorzystaniem RPM jest instalacja nowego pakietu:
  191.  
  192.  
  193.                rpm -i foobar-1.0-1.i386.rpm
  194.  
  195.  
  196.  
  197.  
  198.   R≤wnie proste jest jego odinstalowanie:
  199.                rpm -e foobar
  200.  
  201.  
  202.  
  203.  
  204.   Przyk│adem bardziej z│o┐onego, ale  bardzo u┐ytecznego polecenia jest
  205.   instalacja pakiet≤w poprzez FTP. Je╢li jeste╢ pod│▒czony do sieci i
  206.   chcesz zainstalowaµ nowy pakiet, to wszystko co musisz zrobiµ to podaµ
  207.   nazwΩ pliku jako poprawny URL, np.:
  208.  
  209.  
  210.                rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm
  211.  
  212.  
  213.  
  214.  
  215.   Chcia│bym podkre╢liµ, ┐e w tym przypadku RPM sprawdzi b▒d╝ zainstaluje
  216.   pakiet poprzez FTP.
  217.  
  218.   By│y to w miarΩ proste polecenia, lecz rpm mo┐e byµ u┐yty na wiele
  219.   wiΩcej sposob≤w jak mo┐na siΩ │atwo przekonaµ pisz▒c w linii komend
  220.  
  221.  
  222.                rpm
  223.  
  224.  
  225.  
  226.  
  227.   i naciskaj▒c Enter:
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.   RPM version 2.3.9
  266.   Copyright (C) 1997 - Red Hat Software
  267.   This may be freely redistributed under na warunkach
  268.    of the
  269.   GNU Public License
  270.  
  271.   usage: rpm {--help}
  272.          rpm {--version}
  273.          rpm {--initdb}   [--dbpath <dir>]
  274.          rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]
  275.                           [--replacepkgs] [--replacefiles] [--root <dir>]
  276.                           [--excludedocs] [--includedocs] [--noscripts]
  277.                           [--rcfile <file>] [--ignorearch] [--dbpath <dir>]
  278.                           [--prefix <dir>] [--ignoreos] [--nodeps]
  279.                           [--ftpproxy <host>] [--ftpport <port>]
  280.                           file1.rpm ... fileN.rpm
  281.          rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]
  282.                           [--oldpackage] [--root <dir>] [--noscripts]
  283.                           [--excludedocs] [--includedocs] [--rcfile <file>]
  284.                           [--ignorearch]  [--dbpath <dir>] [--prefix <dir>]
  285.                           [--ftpproxy <host>] [--ftpport <port>]
  286.                           [--ignoreos] [--nodeps] file1.rpm ... fileN.rpm
  287.          rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]
  288.                           [--scripts] [--root <dir>] [--rcfile <file>]
  289.                           [--whatprovides] [--whatrequires] [--requires]
  290.                           [--ftpuseport] [--ftpproxy <host>] [--ftpport <port>]
  291.                           [--provides] [--dump] [--dbpath <dir>] [targets]
  292.          rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]
  293.                           [--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]
  294.                           [--nomd5] [targets]
  295.          rpm {--setperms} [-afpg] [target]
  296.          rpm {--setugids} [-afpg] [target]
  297.          rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]
  298.                           [--dbpath <dir>] [--nodeps] [--allmatches]
  299.                           package1 ... packageN
  300.          rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile  <file>]
  301.                           [--sign] [--test] [--timecheck <s>] specfile
  302.          rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
  303.          rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
  304.          rpm {--resign} [--rcfile <file>] package1 package2 ... packageN
  305.          rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN
  306.          rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>]
  307.                              package1 ... packageN
  308.          rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]
  309.          rpm {--querytags}
  310.  
  311.  
  312.  
  313.  
  314.   Wszystkie te opcje s▒ opisane w podrΩczniku systemowym "man"
  315.   dotycz▒cym RPM.
  316.  
  317.  
  318.   5.  A co tak naprawdΩ  mo┐na zrobiµ z RPM?
  319.  
  320.   RPM jest bardzo wygodnym narzΩdziem i jak mo┐na by│o siΩ przekonaµ, ma
  321.   sporo opcji.  Najlepsz▒ metod▒ zapoznania siΩ z nimi s▒ przyk│ady.
  322.  
  323.   Pokaza│em ju┐ najprostsz▒ instalacjΩ i usuwanie pakiet≤w, czas na
  324.   trochΩ ciekawsze przyk│ady:
  325.  
  326.   ╖  W praktyce instaluj▒c pakiet chce siΩ usun▒c jego star▒ wersjΩ
  327.      (opcja -U od ang. upgrade). CzΩsto chcemy r≤wnie┐ widzieµ postΩp
  328.      instalacji (-h od ang. hash) oraz dostaµ poszerzone komunikaty o
  329.      b│Ωdach (-v od ang. verbose), tak wiΩc praktycznie najczΩ╢ciej
  330.      pakiety instaluje siΩ poprzez:
  331.                rpm -Uhv foobar-1.0-1.i386.rpm
  332.  
  333.  
  334.  
  335.  
  336.   ╖  Powiedzmy, ┐e skasowa│e╢ przypadkiem jakie╢ pliki, niestety, nie
  337.      znasz nawet ich nazw.  Je╢li wiΩc chcesz zweryfikowaµ ca│y system i
  338.      sprawdziµ czego mo┐e brakowaµ, zr≤b tak:
  339.  
  340.  
  341.        rpm -Va
  342.  
  343.  
  344.  
  345.  
  346.   (od ang. Verify all)
  347.  
  348.   ╖  Powiedzmy, ┐e natkn▒│e╢ siΩ na plik, kt≤rego nie znasz.  »eby
  349.      sprawdziµ do jakiego pakietu nale┐y, zr≤b:
  350.  
  351.  
  352.        rpm -qf /usr/X11R6/bin/xjewel
  353.  
  354.  
  355.  
  356.  
  357.   (od ang. query file).  W wyniku otrzymasz nazwΩ pakietu:
  358.  
  359.  
  360.        xjewel-1.6-1
  361.  
  362.  
  363.  
  364.  
  365.  
  366.   ╖  Natkn▒│e╢ siΩ na jaki╢ plik RPM i chcia│by╢ sprawdziµ co jest w
  367.      ╢rodku. Zr≤b tak:
  368.  
  369.  
  370.        rpm -qpi koules-1.2-2.i386.rpm
  371.  
  372.  
  373.  
  374.  
  375.   Wy╢wietli Ci siΩ co╢ takiego:
  376.  
  377.  
  378.        Name        : koules                      Distribution: Red Hat Linux Colgate
  379.        Version     : 1.2                               Vendor: Red Hat Software
  380.        Release     : 2                             Build Date: Mon Sep 02 11:59:12 1996
  381.        Install date: (none)                        Build Host: porky.redhat.com
  382.        Group       : Games                         Source RPM: koules-1.2-2.src.rpm
  383.        Size        : 614939
  384.        Summary     : SVGAlib action game with multiplayer, network, and sound support
  385.        Description :
  386.        This arcade-style game is novel in conception and excellent in execution.
  387.        No shooting, no blood, no guts, no gore.  The play is simple, but you
  388.        still must develop skill to play.  This version uses SVGAlib to
  389.        run on a graphics console.
  390.  
  391.  
  392.  
  393.  
  394.   (od ang. query package info).
  395.  
  396.  
  397.   ╖  A teraz chcia│by╢ sprawdziµ jakie pliki wchodz▒ w sk│ad tego
  398.      pakietu:
  399.  
  400.  
  401.        rpm -qpl koules-1.2-2.i386.rpm
  402.  
  403.  
  404.  
  405.  
  406.   W wyniku otrzymasz ich listΩ:
  407.  
  408.  
  409.        /usr/doc/koules
  410.        /usr/doc/koules/ANNOUNCE
  411.        /usr/doc/koules/BUGS
  412.        /usr/doc/koules/COMPILE.OS2
  413.        /usr/doc/koules/COPYING
  414.        /usr/doc/koules/Card
  415.        /usr/doc/koules/ChangeLog
  416.        /usr/doc/koules/INSTALLATION
  417.        /usr/doc/koules/Icon.xpm
  418.        /usr/doc/koules/Icon2.xpm
  419.        /usr/doc/koules/Koules.FAQ
  420.        /usr/doc/koules/Koules.xpm
  421.        /usr/doc/koules/README
  422.        /usr/doc/koules/TODO
  423.        /usr/games/koules
  424.        /usr/games/koules.svga
  425.        /usr/games/koules.tcl
  426.        /usr/man/man6/koules.svga.6
  427.  
  428.  
  429.  
  430.  
  431.   (od ang. query package list)
  432.  
  433.   ╖  Chcesz wy╢wietliµ listΩ pakiet≤w zainstalowanych w Twoim systemie?
  434.      Nic prostszego:
  435.  
  436.  
  437.        rpm -qa
  438.  
  439.  
  440.  
  441.  
  442.   (od ang. query all).
  443.  
  444.   ╖  Chcesz sprawdziµ czy pakiet jest kompletny, nie przek│amany i mam
  445.      poprawny podpis PGP?
  446.  
  447.  
  448.        rpm -K -vv pakiet.rpm
  449.  
  450.  
  451.  
  452.  
  453.   To by│o tylko parΩ przyk│ad≤w, wiΩcej znajdziesz np. w man-ie.  Na
  454.   pewno wpadniesz na ciekawsze w miarΩ jak bΩdziesz lepiej poznawa│ RPM.
  455.  
  456.  
  457.   6.  Tworzenie rpm-≤w.
  458.  
  459.   Tworzenie rpm-≤w jest do╢µ proste, szczeg≤lnie je╢li oprogramowanie
  460.   kt≤re chcesz w nie w│o┐yµ poprawnie siΩ instaluje.
  461.  
  462.  
  463.   Procedura tworzenia RPM-≤w wygl▒da tak:
  464.  
  465.   ╖  Upewnij siΩ, ┐e plik /etc/rpmrc jest obecny i poprawnie
  466.      skonfigurowany w Twoim systemie.
  467.  
  468.   ╖  Doprowad╝ to tego, ┐e pliki ╝r≤d│owe dla kt≤rych tworzysz rpm
  469.      poprawnie siΩ instaluj▒.
  470.  
  471.   ╖  Przygotuj listΩ poprawek jakich musia│e╢ dokonaµ by kod kompilowa│
  472.      siΩ poprawnie.
  473.  
  474.   ╖  Przygotuj plik specyfikuj▒cy (.spec) dla Twojego pakietu.
  475.  
  476.   ╖  Upewnij siΩ, ┐e wszystko jest na swoim miejscu.
  477.  
  478.   ╖  Zbuduj pakiet u┐ywaj▒c rpm.
  479.  
  480.   Zazwyczaj RPM tworzy zar≤wno pakiety binarne jak i ╝r≤d│owe.
  481.  
  482.  
  483.   6.1.  Plik rpmrc
  484.  
  485.   W chwili obecnej, jedyny spos≤b konfiguracji RPM-a jest dostΩpny
  486.   poprzez plik /etc/rpmrc.  Przyk│adowy plik wygl▒da tak:
  487.  
  488.  
  489.        require_vendor: 1
  490.        distribution: Moja w│asna dystrybucja!
  491.        require_distribution: 1
  492.        topdir: /usr/src/me
  493.        vendor: Kubu╢soft
  494.        packager: Pakuj▒cy RPM w Kubu╢soft <pakiety@kubu╢soft.com.pl>
  495.  
  496.        optflags: i386 -O2 -m486 -fno-strength-reduce
  497.        optflags: alpha -O2
  498.        optflags: sparc -O2
  499.  
  500.        signature: pgp
  501.        pgp_name: Pakuj▒cy RPM w Kubu╢soft
  502.        pgp_path: /home/pakiety/.pgp
  503.  
  504.        tmppath: /usr/tmp
  505.  
  506.  
  507.  
  508.  
  509.   Wiersz require_vendor zmusza RPM-a do szukania wiersza z nazw▒
  510.   producenta pakiet≤w (vendor).  Ta mo┐e pochodziµ z pliku /etc/rpmrc
  511.   lub z nag│≤wka pliku .spec.  By wy│▒czyµ tΩ opcjΩ, zmie± liczbΩ na 0.
  512.   Analogicznie jest w przypadku wierszy require_distribution oraz
  513.   require_group.
  514.  
  515.   NastΩpnym wiersz zawiera  distribution i okre╢la nazwΩ dystrybucji.
  516.   Mo┐esz j▒ zdefiniowaµ tutaj, b▒d╝ p≤╝niej, w nag│≤wku pliku
  517.   specyfikuj▒cego.  Tworz▒c pakiet dla konkretnej dystrybucji warto
  518.   zadbaµ by wiersz ten zawiera│ poprawn▒ informacjΩ, nawet pomimo tego,
  519.   ┐e nie jest wymagany.  Tyczy siΩ to r≤wnie┐ wiersza vendor
  520.   (producent), choµ nazwa mo┐e byµ zupe│nie dowolna (np. Joe's Software,
  521.   Rock Music Emporium).
  522.  
  523.   RPM pozwala r≤wnie┐ tworzyµ pakiety dla r≤┐nych platform sprzΩtowych.
  524.   Plik rpmrc mo┐e zawieraµ zmienn▒ ``optflags'' wykorzystywan▒ przy
  525.   building budowaniu tych element≤w pakietu, kt≤re wymagaj▒ opcji
  526.   zale┐nych od platformy.  Dok│adniejszy opis tej zmiennej pojawi siΩ w
  527.   jednym z nastΩpnych rodzia│≤w.
  528.  
  529.   Nie s▒ to oczywi╢cie wszystkie etykiety/makra.  Jest ich wiΩcej. By
  530.   siΩ im przyjrzeµ spr≤buj komendy:
  531.  
  532.  
  533.        rpm --showrc
  534.  
  535.  
  536.  
  537.  
  538.   kt≤ra powinna wypisaµ wszystkie mo┐liwe etykiety wraz z ich
  539.   warto╢ciami (o ile s▒ ustawione).
  540.  
  541.  
  542.   6.2.  Plik specyfikuj▒cy .spec
  543.  
  544.   Niniejszy rozdzia│ zawiera opis pliku specyfikuj▒cego dla pakietu.
  545.   Plik taki s▒ niezbΩdne by stworzyµ pakiet.  Zawiera on opis
  546.   oprogramowania wraz z instrukcjami instalacyjnymi oraz listΩ
  547.   wszystkich plik≤w binarnych przez niego instalowanych.
  548.  
  549.   Plik specyfikuj▒cy warto jest nazwaµ zgodnie z konwencj▒.  Powinno to
  550.   wygl▒daµ mniej wiΩcej tak: nazwa pakietu-kreska-numer wersji-kreska-
  551.   numer modyfikacji-kropka-spec.
  552.  
  553.   A tak wygl▒da przyk│adowy plik specyfikuj▒cy (eject-3.0-1.spec):
  554.  
  555.  
  556.        Summary: ejects ejectable media and controls auto ejection
  557.        Name: eject
  558.        Version: 1.4
  559.        Release: 3
  560.        Copyright: GPL
  561.        Group: Utilities/System
  562.        Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
  563.        Patch: eject-1.4-make.patch
  564.        Patch1: eject-1.4-jaz.patch
  565.        %description
  566.        This program allows the user to eject media that is autoejecting like
  567.        CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.
  568.  
  569.        %prep
  570.        %setup
  571.        %patch -p1
  572.        %patch1 -p1
  573.  
  574.        %build
  575.        make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
  576.  
  577.        %install
  578.        install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
  579.        install -m 644 -o 0 -g 0 eject.1 /usr/man/man1
  580.  
  581.        %files
  582.        %doc README COPYING ChangeLog
  583.  
  584.        /usr/bin/eject
  585.        /usr/man/man1/eject.1
  586.  
  587.  
  588.  
  589.  
  590.  
  591.   6.3.  Nag│≤wek
  592.  
  593.   Nag│≤wek pliku .spec zawiera kilka standardowych p≤l kt≤re powinny byµ
  594.   wype│nione. Oto znaczenie poszczeg≤lnych p≤l:
  595.   ╖  Summary: Jest to jednowierszowy, skr≤cony opis pakietu.
  596.  
  597.   ╖  Name: To pole zawiera nazwΩ pliku rpm.  ªci╢le jest to string
  598.      bΩd▒cy t▒ czΩ╢ci▒ nazwy pliku rpm kt≤ra odpowiada nazwie pakietu.
  599.  
  600.   ╖  Version: To pole zawiera wersjΩ pliku rpm.  ªci╢le jest to string
  601.      bΩd▒cy t▒ czΩ╢ci▒ nazwy pliku rpm kt≤ra odpowiada wersji pakietu.
  602.  
  603.   ╖  Release: To pole zawiera numer modyfikacji pliku rpm. Jest to
  604.      liczba m≤wi▒ca z kt≤r▒ modyfikacj▒ (podwersj▒) obecnej wersji
  605.      pakietu mamy do czynienia (tzn. je╢li dokonany w pakiecie tylko
  606.      minimalnych poprawek b│Ωd≤w to wypuszczamy pakiet w tej samej
  607.      wersji ale z numerem modyfikacji wiΩkszym o jeden).
  608.  
  609.   ╖  Icon: To pole zawiera nazwΩ pliku z ikon▒ przeznaczon▒ do
  610.      wykorzystania przez narzΩdzia instalacyjne wy┐szego poziomu (np.
  611.      ``glint'' RedHat-a). Plik ten powinien byµ zapisany w formacie GIF
  612.      i znajdowaµ siΩ w katalogu SOURCES.
  613.  
  614.   ╖  Source: This wiersz zawiera nazwΩ pliku ╝r≤d│owego z kt≤rego jest
  615.      budowany dany rpm.  Jest to pomocne w sytuacji gdy chce siΩ kiedy╢
  616.      zajrzeµ do odpowiednich kod≤w ╝r≤d│owych lub sprawdziµ czy nie ma
  617.      ich nowszej wersji.  Uwaga:  Nazwa pliku w tym wierszu MUSI
  618.      odpowiadaµ nazwie pliku obecnego w Twoim systemie.  (tzn. nie
  619.      zmieniaj nazw plik≤w ╝r≤d│owych po ich ╢ci▒gniΩciu).  Mo┐na podaµ
  620.      wiΩcej ni┐ jeden plik ╝r≤d│owy pisz▒c w poni┐szy spos≤b:
  621.  
  622.  
  623.        Source0: blah-0.tar.gz
  624.        Source1: blah-1.tar.gz
  625.        Source2: fooblah.tar.gz
  626.  
  627.  
  628.  
  629.  
  630.   Te pliki powinny siΩ znale╝µ w katalogu SOURCES.  (Struktura tego kat¡
  631.   alogu jest opisana w rozdziale "Katalogi z plikami ╝r≤d│owymi".)
  632.  
  633.   ╖  Patch: To pole zawiera miejsce w kt≤rym bΩdzie mo┐na znale╝µ
  634.      poprawki(patch) je╢li zainstnieje potrzeba ich ponownego
  635.      ╢ci▒gniΩcia.  Uwaga:  Nazwa tego pliku musi odpowiadaµ nazwie pliku
  636.      jaki jest u┐yty do naniesienia Twoich poprawek.  Mo┐na te┐ podaµ
  637.      wiele plik≤w z poprawkami analogicznie do wielu plik≤w ╝r≤d│owych:
  638.  
  639.  
  640.        Patch0: blah-0.patch
  641.        Patch1: blah-1.patch
  642.        Patch2: fooblah.patch
  643.  
  644.  
  645.  
  646.  
  647.   Te pliki powinny siΩ znale╝µ w katalogu SOURCES.
  648.  
  649.   ╖  Copyright: Ten wiersz opisuje do jakiej kategorii ze wzglΩdu na
  650.      prawo autorskie nale┐y dane oprogramowanie. Najlepiej wykorzystaµ
  651.      jedn▒ z dobrze zdefiniowanych kategorii: GPL, BSD, MIT, public
  652.      domain, distributable, lub commercial.
  653.  
  654.   ╖  BuildRoot: Ten wiersz pozwala zdefiniowaµ g│≤wny katalog (``root'')
  655.      dla tworzenia i instalacji pakietu.  Mo┐na to wykorzystaµ np. do
  656.      testowania instalacji pakietu zanim siΩ go zainstaluje w docelowym
  657.      miejscu.
  658.  
  659.   ╖  Group: Ten wiersz s│u┐y do tego, by programy instalacyjne wy┐szego
  660.      poziomu (wspomniany ``glint'') wiedzia│y w jakim miejscu ich
  661.      hierarchicznej struktury grup pakiet≤w umie╢ciµ dany pakiet.  W
  662.      chwili obecnej drzewo grup pakiet≤w wygl▒da mniej wiΩcej tak:
  663.  
  664.  
  665.        Applications
  666.            Communications
  667.            Editors
  668.                Emacs
  669.            Engineering
  670.            Spreadsheets
  671.            Databases
  672.            Graphics
  673.            Networking
  674.            Mail
  675.            Math
  676.            News
  677.            Publishing
  678.                TeX
  679.        Base
  680.            Kernel
  681.        Utilities
  682.            Archiving
  683.            Console
  684.            File
  685.            System
  686.            Terminal
  687.            Text
  688.        Daemons
  689.        Documentation
  690.        X11
  691.            XFree86
  692.                Servers
  693.            Applications
  694.                Graphics
  695.                Networking
  696.            Games
  697.                Strategy
  698.                Video
  699.            Amusements
  700.            Utilities
  701.            Libraries
  702.            Window Managers
  703.        Libraries
  704.        Networking
  705.            Admin
  706.            Daemons
  707.            News
  708.            Utilities
  709.        Development
  710.            Debuggers
  711.            Libraries
  712.                Libc
  713.            Languages
  714.                Fortran
  715.                Tcl
  716.            Building
  717.            Version Control
  718.            Tools
  719.        Shells
  720.        Games
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.   ╖  %description  Nie jest to element nag│≤wka w ╢cis│ym tego s│owa
  728.      znaczeniu ale jego opis powinien siΩ znale╝µ wraz z opisem
  729.      nag│≤wka. Dla ka┐dego pakietu lub subpakietu potrzebne jest jedno
  730.      takie pole zawieraj▒ce przejrzysty i zrozumia│y opis pakietu.
  731.  
  732.  
  733.   6.4.  Sekcja Prep
  734.  
  735.   Jest to druga czΩ╢µ pliku specyfikuj▒cego.  U┐ywa siΩ jej do
  736.   przygotowania ╝r≤de│ do kompilacji/instalacji.  W niej powinny
  737.   znajdowaµ siΩ wszystkie czynno╢ci niezbΩdne by nanie╢µ poprawki do
  738.   ╝r≤de│ i doprowadziµ je do stanu w kt≤rym bΩdzie mo┐na wydaµ komendΩ
  739.   make.
  740.  
  741.   Jedn▒ rzecz nale┐y podkre╢liµ: Ka┐da z tych czΩ╢ci jest tak naprawdΩ
  742.   tylko miejscem do umieszczenia odpowiednich skrypt≤w.  Mo┐esz po
  743.   prostu napisaµ skrypt w sh a nastΩpnie umie╢ciµ go po znaczniku %prep
  744.   by rozpakowaµ i wprowadziµ poprawki do swoich program≤w.  By to
  745.   u│atwiµ powsta│y specjalne makra.
  746.  
  747.   Pierwszym z nich jest makro %setup.  W swojej najprostszej formie (bez
  748.   dodatkowych opcji w linii polece±), rozpakowywuje ona ╝r≤d│a i zmienia
  749.   bie┐▒cy katalog na katalog zawieraj▒cy ╝r≤d│a.  Poza tym ma jednak
  750.   dodatkowe opcje:
  751.  
  752.   ╖  -n name ustawi nazwΩ roboczego katalogu na name.  Domy╢lnie jest to
  753.      $NAZWA-$WERSJA.  Do innych mo┐liwo╢ci nale┐▒ $NAZWA,
  754.      ${NAZWA}${WERSJA}, czy jakakolwiek inna u┐ywana przez g│≤wny plik
  755.      tar.  (ProszΩ zauwa┐yµ, ┐e zmienne ``$'' nie s▒ faktycznymi
  756.      zmiennymi dostΩpnymi wewn▒trz pliku specyfikuj▒cego. W
  757.      rzeczywisto╢ci s▒ one tutaj u┐yte w miejsce przyk│adowej nazwy. W
  758.      pakiecie nale┐y u┐yµ rzeczywistej nazwy i wersji, a nie zmiennej.)
  759.  
  760.   ╖  -c utworzy i wejdzie do wymienionego katalogu zanim zacznie siΩ
  761.      rozpakowywanie poprzez untar.
  762.  
  763.   ╖  -b # wykona untar (rozpakuje) Source# zanim wejdzie do katalogu
  764.      roboczego (nie ma sensu │▒czenie tej opcji z -c, a wiΩc siΩ tego
  765.      nie robi).  Jest to przydatne w przypadku wielu plik≤w ╝r≤d│owych.
  766.  
  767.   ╖  -a # wykona untar (rozpakuje) Source# po wej╢ciu do katalogu.
  768.  
  769.   ╖  -T Ta opcja zmienia domy╢ln▒ procedurΩ rozpakowywania  (untar)
  770.      ╝r≤de│ i wymaga -b 0 lub -a 0 by g│≤wny plik ╝r≤d│owy zosta│
  771.      rozpakowany (untar).  Komenda ta jest potrzebna gdy u┐ywany jest
  772.      wiΩcej ni┐ jeden komplet plik≤w ╝r≤d│owych.
  773.  
  774.   ╖  -D Nie usuwaj katalogu przed rozpakowaniem.  Jest ona przydatna
  775.      tylko wtedy, gdy ma siΩ wiΩcej ni┐ jedno makro konfiguracyjne.
  776.      Powinna byµ u┐ywana wy│▒cznie w makrach konfiguracyjnych wy│▒cznie
  777.      po wykonaniu pierwszego z nich (ale nigdy wΩwn▒trz pierwszego z
  778.      nich).
  779.  
  780.   NastΩpne dostΩpne makra znajduj▒ siΩ w makrze %patch.  Makro te pomaga
  781.   zautomatyzowaµ proces nanoszenie poprawek do ╝r≤de│.  Mo┐liwe s▒
  782.   liczne opcje opisane poni┐ej:
  783.  
  784.   ╖  # zastosuje Patch# jako plik z poprawkami.
  785.  
  786.   ╖  -p # podaje liczbΩ katalog≤w do odrzucenia z nazwy przed
  787.      wykorzystaniem polecenia patch(1)
  788.  
  789.   ╖  -P Domy╢lnie stosowana jest Patch (lub Patch0).  Ta flaga wy│▒cza
  790.      to zachowanie a wiΩc wymaga dodatkowo 0 by g│≤wne pliki ╝r≤d│owe
  791.      zosta│y rozpakowane. Opcja ta jest przydatna w drugim (b▒d╝
  792.      dalszym) makrze %patch kt≤re wymaga innego ni┐ pierwsze makro
  793.      numeru poprawki.
  794.  
  795.   ╖  Mo┐na te┐ napisaµ %patch# zamiast : %patch # -P
  796.  
  797.   To s▒ wszystkie makra jakich potrzebujesz. Po ich poprawnym napisaniu
  798.   mo┐na wykonaµ dowolne inne komendy konfiguracyjne poprzez stworzenie
  799.   odpowiednich fragment≤w skrypt≤w w sh.  Wszystko co zostanie
  800.   umieszczone a┐ do makra %build (omawianego w nastΩpnym rozdziale)
  801.   bΩdzie wykonane przez sh.  Przyk│ady powy┐ej mog▒ sugerowaµ rzeczy
  802.   jakie chcia│by╢ tam umie╢ciµ.
  803.  
  804.  
  805.   6.5.  Sekcja Build
  806.  
  807.   Dla tej sekcji nie ma jakich╢ specjalnych makr.  Powinno siΩ w niej
  808.   umieszczaµ dowolne polecenia potrzebne do stworzenia pakietu po
  809.   rozpakowaniu ╝r≤de│, naniesieniu poprawek i przej╢ciu do katalogu
  810.   roboczego. Jest to po prostu nastΩpny zbi≤r polece± przekazany do sh,
  811.   wiΩc mo┐na tu u┐ywaµ dowolnych poprawnych polece± sh (w│▒cznie z
  812.   komentarzami).  Katalog roboczy na pocz▒tku ka┐dej z sekcji jest
  813.   ustawiany na katalog g│≤wny z plikami ╝r≤d│owymi, o czym trzeba
  814.   pamiΩtaµ i w razie potrzeby przechodziµ do odpowiednich podkatalog≤w.
  815.  
  816.  
  817.   6.6.  Sekcja Install
  818.  
  819.   Tu r≤wnie┐ nie ma jakich╢ specjalnych makr. Sekcja ta powinna zawieraµ
  820.   listΩ polece± potrzebnych do instalacji pakietu. Je╢li wykonujesz make
  821.   install by zainstalowaµ pakiet, umie╢µ to tu.  Mo┐esz r≤wnie┐ nanie╢µ
  822.   poprawki do makefile'a zanim wykonasz make install. Je╢li nie to
  823.   umie╢µ tu sekwencjΩ polece± sh jakich potrzebujesz. Katalog roboczy,
  824.   identycznie jak w poprzednim przypadku, jest ustawiany przed
  825.   wykonaniem tych polece± na g│≤wny katalog z plikami ╝r≤d│owymi.
  826.  
  827.  
  828.   6.7.  Opcjonalne sekcje pre i post dla sekcji Install/Uninstall
  829.  
  830.   Mo┐esz tu umie╢ciµ skrypty do wykonania przed i po
  831.   instalacji/deinstalacji (tzn. sekcjami Install/Uninstall).  G│≤wny
  832.   pow≤d to np. potrzeba wykonania komendy ldconfig po instalacji b▒d╝
  833.   usuwaniu pakiet≤w zawieraj▒cych biblioteki dzielone. Makra s▒
  834.   zdefiniowane jak poni┐ej:
  835.  
  836.   ╖  %pre makro z poleceniami wykonywanymi przed sekcj▒ Install.
  837.  
  838.   ╖  %post makro z poleceniami wykonywanymi po sekcji Install.
  839.  
  840.   ╖  %preun makro z poleceniami wykonywanymi przed sekcj▒ Uninstall.
  841.  
  842.   ╖  %postun makro z poleceniami wykonywanymi po sekcji Uninstall.
  843.  
  844.   Sekcje te mog▒ zawieraµ dowolne poprawne polecenia sh ( nie
  845.   potrzebujesz wstawiaµ #!/bin/sh na pocz▒tku).
  846.  
  847.  
  848.   6.8.  Sekcja Files
  849.  
  850.   W sekcji tej musisz wypisaµ pliki jakie wchodz▒ w sk│ad pakietu. RPM
  851.   nie potrafi okre╢liµ jakie pliki zostaj▒ zainstalowan na skutek np.
  852.   make install.  Tego siΩ po prostu  NIE DA rozs▒dnie zrobiµ.  Owszem,
  853.   by│a propozycja wykonywania polecenia find przed i po instalacji
  854.   pakietu. Jednak w systemach wielou┐ytkownikowych nie jest to zbyt
  855.   sensowne gdy┐ w tym samym czasie mog│o powstaµ wiele innych plik≤w nie
  856.   maj▒cych najmniejszego zwi▒zku z instalowanym pakietem.
  857.  
  858.  
  859.   W tej sekcji dostΩpne jest pare specjalnych makr.  S▒ one opisane
  860.   poni┐ej:
  861.  
  862.   ╖  %doc s│u┐y do zaznaczenia kt≤re pliki pakietu s▒ jego dokumentacj▒.
  863.      Dokumentacja ta zostanie umieszczona w katalogu:
  864.      /usr/doc/$NAZWA-$WERSJA-$MODYFIKACJA.  Mo┐na zar≤wno podaµ nazwy
  865.      kilku plik≤w w linii zawieraj▒cej to makro jak i podaµ te nazwy
  866.      oddzielnie u┐ywaj▒c makra dla ka┐dej z nich.
  867.  
  868.   ╖  %config s│u┐y do zaznaczenia plik≤w konfiguracyjnych w obrΩbie
  869.      pakietu. Chodzi tu o pliki typu: sendmail.cf, passwd, etc. W
  870.      trakcie deinstalacji pliki te s▒ usuwane o ile nie by│y zmieniane.
  871.      Je╢li by│y, to ich nazwa zostaje zmieniona poprzez dodanie ko±c≤wki
  872.      .rpmsave.  Analogicznie jak dla plik≤w z dokumentacj▒ jedno makro
  873.      mo┐e s│u┐yµ do zdefiniowania kilku takich plik≤w.
  874.  
  875.   ╖  %dir zaznacza dany katalog jako nale┐▒cy do pakietu. Domy╢lnie,
  876.      je╢li pojawi siΩ nazwa katalogu BEZ  makra %dir, WSZYSTKO w tym
  877.      katalogu jest w│▒czane w liste plik≤w i nastΩpnie instalowane jako
  878.      czΩ╢µ pakietu. To makro pozwala tego unikn▒µ.
  879.  
  880.   ╖  %files -f <filename> pozwala na w│▒czenie listy plik≤w znajduj▒cej
  881.      siΩ w jakim╢ pliku w obrΩbie katalogu z plikami ╝r≤d│owymi.  Jest
  882.      to wygodne gdy procedura instalacji buduje w│asn▒ listΩ plik≤w
  883.      kt≤r▒ nastΩpnie mo┐na w│▒czyµ jedn▒ komend▒ bez podawania nazw tych
  884.      plik≤w.
  885.  
  886.   NajwiΩksz▒ trudno╢ci▒ w li╢cie plik≤w jest podawanie katalag≤w. Je╢li
  887.   np. podasz przez pomy│kΩ /usr/bin, to Tw≤j pakiet rpm bΩdzie zawiera│
  888.   wszystkie pliki w katalogu /usr/bin w Twoim komputerze.
  889.  
  890.  
  891.   6.9.  Tworzenie pakietu
  892.  
  893.  
  894.   6.9.1.  Katalogi z plikami ╝r≤d│owymi
  895.  
  896.   Jedn▒ z podstawowych rzeczy jest poprawnie skonfigurowane katalog≤w w
  897.   kt≤rych RPM bΩdzie budowa│ pakiet.  Robi siΩ to poprzez plik
  898.   /etc/rpmrc.  WiΩkszo╢µ os≤b u┐ywa po prostu /usr/src.
  899.  
  900.   Mo┐liwe, ┐e bΩdziesz potrzebowa│ utworzyµ poni┐sze katalogi:
  901.  
  902.   ╖  BUILD jest katalogiem w kt≤rym RPM buduje pakiet.  Pr≤bne tworzenie
  903.      pakietu mo┐esz wykonaµ w jakimkolwiek katalogu kt≤ry tu podasz.
  904.  
  905.   ╖  SOURCES jest katalogiem w kt≤rym powiniene╢ umie╢ciµ oryginalne
  906.      pliki ╝r≤d│owe i pliki z poprawkami. Jest to miejsce do kt≤rego RPM
  907.      bΩdzie zagl▒da│ domy╢lnie.
  908.  
  909.   ╖  SPECS jest katalogiem w kt≤rym powinny siΩ znale╝µ wszystkie pliki
  910.      specyfikuj▒ce (spec).
  911.  
  912.   ╖  RPMS RPM umie╢ci tu binarme pliki RPM po ich zbudowaniu.
  913.  
  914.   ╖  SRPMS RPM umie╢ci to pliki RPM z plikami ╝r≤d│owymi.
  915.  
  916.  
  917.   6.9.2.  Pr≤bne tworzenie pakietu
  918.  
  919.   Pierwsz▒ rzecz▒ do zroienia jest doprowadzenie plik≤w ╝r≤d│owych do
  920.   takiego stanu by kompilowa│y i/lub instalowa│y siΩ bez pomocy RPM-a.
  921.   By to osi▒gn▒µ, rozpakuj ╝r≤d│a i zmie± nazwΩ katalogu na $NAZWA.orig.
  922.   NastΩpnie ponownie rozpakuj ╝r≤d│a i pracuj na nich.  Wejd╝ do ich
  923.   katalogu i postΩpuj zgodnie z instrukcjia ich instalacji/kompilacji.
  924.   Je╢li bΩdzie konieczna edycja jakich╢ plik≤w to konieczne bΩdzie
  925.   wygenerowanie pliku z poprawkami (patch).  Je╢li doprowadzisz ╝r≤d│a
  926.   do stanu w kt≤rym bΩd▒ siΩ poprawnie instalowaµ/kompilowaµ - wyczy╢µ
  927.   katalog ╝r≤d│owy.  Upewnij siΩ, ┐e wszystkie pliki stworzone w
  928.   skrypcie konfiguracyjnym (configure) zosta│y usuniΩte.  NastΩpnie
  929.   wyjd╝ z katalogu ╝r≤d│owego i wykonaj co╢ takiego:
  930.  
  931.  
  932.                diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch
  933.  
  934.  
  935.  
  936.  
  937.   (dirname w tym przyk│adzie to to samo co $NAZWA parΩ linii powy┐ej).
  938.   Polecenie to stworzy plik z poprawkami jaki bΩdzie m≤g│ byµ wykorzys¡
  939.   tany w pliku specyfikuj▒cy.  Zauwa┐, ┐e ``linux'' w nazwie pliku z
  940.   poprawkami jest jakim╢ wybranym identyfikatorem.  Zamiast tego mo┐na
  941.   u┐yµ czego╢ bardziej precyzyjnego jak np. ``config'' lub ``bugs''
  942.   (b│Ωdy) by opisaµ dlaczego poprawki by│y potrzebne.  Przed u┐yciem
  943.   pliku z poprawkami warto do niego zajrzeµ by siΩ upewniµ, ┐e przypad¡
  944.   kiem nie znalaz│o siΩ w nim co╢ niew│a╢ciwego jak np. pliki binarne.
  945.  
  946.  
  947.   6.9.3.  Tworzenie listy plik≤w
  948.  
  949.   Teraz, gdy ╝r≤d│a siΩ kompiluj▒ i instaluj▒ i wiadomo jak to robiµ to
  950.   zr≤b to, skompiluj i zainstaluj.  Przyjrzyj siΩ wynikowi instalacji i
  951.   stw≤rz w ten spos≤b listΩ plik≤w do u┐ycia w pliku specyfikuj▒cym.
  952.   Zazwyczaj plik specyfikuj▒cy powstaje r≤wnocze╢nie z opisywanymi tu
  953.   krokami.  Po prostu tworzy siΩ go na pocz▒tku wstawiaj▒c to co jest
  954.   znane i potem w miarΩ postΩpu prac uzype│nia siΩ go o brakuj▒ce
  955.   kawa│ki.
  956.  
  957.  
  958.   6.9.4.  Tworzenie pakietu RPM
  959.  
  960.   Gdy plik specyfikuj▒cy jest gotowy, mo┐na ju┐ pr≤bowaµ tworzyµ nowy
  961.   pakiet. Najwygodniej jest to zrobiµ poni┐szym poleceniem:
  962.  
  963.  
  964.  
  965.                rpm -ba foobar-1.0.spec
  966.  
  967.  
  968.  
  969.  
  970.   Opcja -b ma parΩ interesuj▒cyh podopcji:
  971.  
  972.   ╖  p oznacza wykonanie sekcji prep pliku specyfikuj▒cego.
  973.  
  974.   ╖  l wykona parΩ r≤┐nych test≤w na plikach %files.
  975.  
  976.   ╖  c wykonaj sekcjΩ prep i kompiluj.  Jest to przydatne gdy jest siΩ
  977.      niepewnym czy ╝r≤d│a w og≤le bΩd▒ siΩ kompilowaµ/instalowaµ.
  978.      Owszem, na pierwszy rzut oka mo┐e to wygl▒daµ na zbΩdne gdy┐ mo┐na
  979.      dot▒d pracowaµ ze ╝r≤d│ami a┐ bΩd▒ siΩ kompilowaµ jednak gdy
  980.      przyzwyczaisz siΩ do wykorzystania RPM-a to spotkasz siΩ z
  981.      sytuacjami w kt≤rach ta opcja oka┐e siΩ przydatna.
  982.  
  983.   ╖  i wykonaj prep, kompiluj i instaluj.
  984.  
  985.   ╖  b prep, kompiluj, instaluj, i buduj jedynie pakiet binarny.
  986.  
  987.   ╖  a zbuduj wszystko - zar≤wno pakiet ╝r≤d│owy jak i binarny.
  988.  
  989.      Jest te┐ parΩ dodatkowych podopcji do opcji -b:
  990.  
  991.   ╖  --short-circuit przejdzie prosto do okre╢lonego etapu (mo┐e byµ
  992.      u┐yte wy│▒cznie z c oraz i)
  993.  
  994.   ╖  --clean usuwa katalog ze ╝r≤d│ami stworzony w czasie budowania
  995.      pakietu.
  996.  
  997.   ╖  --keep-temps zachowa wszystkie pliki temporalne i skrypty kt≤re
  998.      zosta│y umieszczone w /tmp. Jakie s▒ to pliki mo┐na siΩ dowiedzieµ
  999.      wykorzystuj▒c opcjΩ -v.
  1000.  
  1001.   ╖  --test nie wykonuje ┐adnych rzeczywistych etap≤w choµ wykonuje
  1002.      keep-temps.
  1003.  
  1004.  
  1005.   6.10.  Testowanie pakietu
  1006.  
  1007.   Po stworzeniu pakietu rpm ╝r≤d│owego i binarnego nale┐y je
  1008.   przetestowaµ. Najpro╢ciej i najlepiej jest wykorzystaµ do tego
  1009.   zupe│nie inny komputer ni┐ ten na kt≤rym pakiet by│ tworzony. W ko±cu
  1010.   przy tworzeniu pakietu by│ on do╢µ czΩsto instalowany i na komputerze
  1011.   na kt≤rym powstawa│ powinno byµ to zrobione do╢µ dobrze.
  1012.  
  1013.   Mo┐na te┐ pr≤bowaµ rpm -u nazwapakietu.rpm na testowanym pakiecie ale
  1014.   mo┐e byµ to zdradliwe w sytuacji w kt≤rej jakie╢ pliki zosta│y
  1015.   pominiΩte w li╢cie plik≤w i nie zostan▒ wtedy usuniΩte.  Wtedy
  1016.   zainstalowany program bΩdzie kompletny mimo tego, ┐e rpm bΩdzie
  1017.   b│Ωdny. PamiΩtaj, ┐e poniewa┐ Ty ju┐ zrobi│e╢ rpm -ba package, to
  1018.   zdecydowana wiΩkszo╢µ os≤b instaluj▒cych Tw≤j pakiet wykona jedynie
  1019.   rpm -i package. Upewnij siΩ, ┐e nie wykonujesz w sekcjach build lub
  1020.   install czego╢ co powinno byµ zrobione gdy instalowany jest wy│▒cznie
  1021.   pakiet binarny.
  1022.  
  1023.  
  1024.  
  1025.   6.11.  Co robiµ z Twoimi nowymi RPM-ami ?
  1026.  
  1027.   Gdy ju┐ stworzy│e╢ sw≤j w│asny pakiet RPM (zak│adaj▒c, ┐e nie ma ju┐
  1028.   takiego pakietu dostΩpnego pod postaci▒ RPM) mo┐esz udostΩpniµ wynik
  1029.   swojej pracy innym (zak│adaj▒c ┐e to czego pakiet stworzy│e╢ mo┐e byµ
  1030.   tak udostΩpniane).  By udostΩpniµ, umie╢µ to na ftp.redhat.com
  1031.   <ftp://ftp.redhat.com>.
  1032.  
  1033.  
  1034.   6.12.  Co teraz?
  1035.  
  1036.   Prosimy sprawdziµ siΩ, ┐e nic nie zosta│o pominiΩte jeszcze raz
  1037.   czytaj▒c rozdzia│y o "Testowaniu" i "Co robiµ z nowymi RPM-ami".
  1038.   Chcemy mieµ jako RPM wszystko co siΩ da ale chcemy, ┐eby by│y to dobre
  1039.   RPM-y.  Prosimy wiΩc po╢wiΩciµ trochΩ czasu na ich dok│adne
  1040.   przetestowanie i prosimy te┐ o umieszczenie ich w archiwum ftp tak, by
  1041.   ka┐dy m≤g│ z nich skorzystaµ.  A tak┐e, prosimy upewniµ siΩ, ┐e
  1042.   umieszczasz jedynie bezp│atne oprogramowanie.  Oprogramowanie
  1043.   komercyjne i shareware nie powinno byµ umieszczane w archiwum o ile
  1044.   nie zawieraj▒ klauzuli w ich prawach autorskich to dopuszczaj▒cej.
  1045.   Dotyczy to np. Netscape, ssh, pgp, etc.
  1046.  
  1047.  
  1048.   7.  Tworzenie RPM-≤w na wiele platform.
  1049.  
  1050.   RPM mo┐e byµ wykorzystywany do tworzenia pakiet≤w dla Intel i386,
  1051.   Digital Alpha pracuj▒cych pod Linux, oraz Sparc. S▒ te┐ doniesienia o
  1052.   jego wykorzystaniu na platformach SGI i HP.  RPM ma parΩ cech kt≤re
  1053.   czyni▒ tworzenie pakiet≤w na wiele platform prostszymi.  Pierwsz▒ z
  1054.   nich jest dyrektywa ``optflags'' w pliku /etc/rpmrc.  Mo┐e ona byµ
  1055.   wykorzystana do ustawienia odpowiednich opcji i flag, specyficznych
  1056.   dla architektury, potrzebnych do kompilacji b▒d╝ instalacji.  NastΩpn▒
  1057.   cech▒ u│atwiaj▒c▒ tworzenie pakiet≤w na wiele platform s▒ makra
  1058.   ``arch'' w pliku specyfikuj▒cym.  Mog▒ one byµ wykorzystane do
  1059.   wykonania r≤┐nych rzeczy zale┐nych od architektury na kt≤rej pakiet
  1060.   jest instalowany. NastΩpn▒ tak▒ cech▒ jest dyrektywa ``Exclude'' w
  1061.   nag│≤wku.
  1062.  
  1063.  
  1064.   7.1.  Przyk│adowy plik specyfikuj▒cy .spec
  1065.  
  1066.   Poni┐ej zamieszczona jest czΩ╢µ pliku specyfikuj▒cego dla pakietu
  1067.   ``fileutils''.  Jest on przygotowany do instalacji na dw≤ch
  1068.   platformach: Alfach i Intelu.
  1069.  
  1070.  
  1071.        Summary: GNU File Utilities
  1072.        Name: fileutils
  1073.        Version: 3.16
  1074.        Release: 1
  1075.        Copyright: GPL
  1076.        Group: Utilities/File
  1077.        Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
  1078.        Source1: DIR_COLORS
  1079.        Patch: fileutils-3.16-mktime.patch
  1080.  
  1081.        %description
  1082.        These are the GNU file management utilities.  It includes
  1083.        programs
  1084.        to copy, move, list, etc, files.
  1085.  
  1086.        The ls program in this package now incorporates color ls!
  1087.  
  1088.        %prep
  1089.        %setup
  1090.  
  1091.        %ifarch alpha
  1092.        %patch -p1
  1093.        autoconf
  1094.        %endif
  1095.        %build
  1096.        configure --prefix=/usr --exec-prefix=/
  1097.        make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
  1098.  
  1099.        %install
  1100.        rm -f /usr/info/fileutils*
  1101.        make install
  1102.        gzip -9nf /usr/info/fileutils*
  1103.  
  1104.        .
  1105.        .
  1106.        .
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.   7.2.  Dyrektywa optflags
  1113.  
  1114.   W powy┐szym przyk│adzie przedstawione zosta│o u┐ycie dyrektywy
  1115.   ``optflags'' z /etc/rpmrc.  RPM_OPT_FLAGS przyjmuj▒ odpowiedni▒
  1116.   warto╢µ w zale┐no╢ci od tego na jakiej platformie instalowany jest
  1117.   pakiet. Do pliku Makefile u┐ytego w pakiecie nale┐y nanie╢µ poprawki
  1118.   by korzysta│ z tej zmiennej zamiast standardowych opcji (np. -m486 lub
  1119.   -O2).  Mo┐esz siΩ zorientowaµ co powinno byµ zrobione poprzez
  1120.   zainstalowanie pakietu ╝r≤d│owego, jego rozpakowanie i przyjrzenie siΩ
  1121.   plikowi Makefile.  NastΩpnie nale┐y zajrzeµ do plik≤w z poprawkami dla
  1122.   pliku Makefile i sprawdziµ jakie zmiany powinny byµ wprowadzone.
  1123.   7.3.  Makra
  1124.  
  1125.   Makro %ifarch jest bardzo istotne dla tworzenia pakiet≤w na wiele
  1126.   architektur.  W wiΩkszo╢ci przypadk≤w potrzebujesz nanie╢µ jedn▒ lub
  1127.   dwie poprawki specyficzne tylko dla jednej, konkretnej architektury. W
  1128.   takiej sytacji RPM pozwala na naniesienie poprawki wy│▒cznie dla niej.
  1129.  
  1130.  
  1131.   W powy┐szym przypadku, pakiet fileutils ma poprawkΩ dla maszyn
  1132.   64-bitowych.  To naturalnie w chwili obecnej stosuje siΩ tylko do Alf.
  1133.   Tak wiΩc dodajemy makro %ifarch nanosz▒ce odpowiedni▒ poprawkΩ:
  1134.  
  1135.  
  1136.        %ifarch axp
  1137.        %patch1 -p1
  1138.        %endif
  1139.  
  1140.  
  1141.  
  1142.  
  1143.   To zapewni, ┐e poprawka nie bΩdzie naniesiona na ┐adnej innej
  1144.   architekturze a wy│▒cznie na alfach.
  1145.  
  1146.  
  1147.   7.4.  Wy│▒czanie pewnych platform w pakietach
  1148.  
  1149.   Mo┐na opiekowaµ siΩ ╝r≤d│owymi RPM-ami w jednym katalogu dla
  1150.   wszystkich platform. Uzyskuje siΩ to poprzez ``wy│▒czenie'' (ang.
  1151.   exclude) pewnych pakiet≤w z tworzenia ich dla pewnych architektur,
  1152.   tak, ┐e ci▒gle mo┐liwym jest:
  1153.  
  1154.  
  1155.        rpm --rebuild /usr/src/SRPMS/*.rpm
  1156.  
  1157.  
  1158.  
  1159.  
  1160.   daj▒ce w wyniku poprawne pakiety. Je╢li aplikacja nie zosta│a jeszcze
  1161.   do tej pory przeniesiona na dan▒ platformΩ to wystarczy dodaµ wiersz
  1162.   wygladaj▒cy mniej wiΩcej tak:
  1163.  
  1164.  
  1165.        ExcludeArch: axp
  1166.  
  1167.  
  1168.  
  1169.  
  1170.   do nag│≤wka pliku specyfikuj▒cego pakiet ╝r≤d│owy.  NastΩpnie prze¡
  1171.   buduj pakiet na platformΩ na kt≤rej ju┐ pracuje. W ten spos≤b uzyskuje
  1172.   siΩ pakiet, kt≤ry kompiluje siΩ/tworzy siΩ np. na Intel-u podczas gdy
  1173.   mo┐e byµ │atwo opuszczony na Alfie.
  1174.  
  1175.  
  1176.   7.5.  Ostatnie poprawki
  1177.  
  1178.   Wykorzystanie RPM to tworzenia pakiet≤w przeznaczonych na wiele
  1179.   platform jest zazwyczaj prostsze ni┐ doprowadzenie pakietu do stanu w
  1180.   kt≤rym dajΩ siΩ on na nich zainstalowaµ.  Jednak┐e w miarΩ jak
  1181.   powstaje wiΩcej i wiΩcej pakiet≤w w postaci binarnej staje siΩ to
  1182.   coraz prostsze.  Je╢li przy tworzeniu pakietu zabrniesz w ╢lep▒
  1183.   uliczkΩ to jak zwykle, rozwi▒zaniem mo┐e byµ zajrzenie do kodu
  1184.   ╝r≤d│owego podobnego pakietu.
  1185.  
  1186.  
  1187.  
  1188.  
  1189.   8.  Uwaga o prawach autorskich
  1190.  
  1191.   Poni┐szy dokument i jego zawarto╢µ s▒ chronione prawem autorskim.
  1192.   Rozpowszechnianie go i jego zawarto╢ci jest dozwolone tak d│ugo jak
  1193.   d│ugo jego pozostaj▒ one nie zmienione.  Innymi s│owy mo┐na go
  1194.   wy│▒cznie przeformatowywaµ, drukowaµ i rozpowszechniaµ.
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.